/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ejercicio.practica3;

import static java.lang.Math.acos;
import static java.lang.Math.cos;
import static java.lang.Math.pow;
import static java.lang.Math.sin;
import static java.lang.Math.sqrt;

/**
 *
 * @author manolo
 */
public class Poligono {

    private Punto[] punto;
    private Punto c = new Punto();
    private Punto v = new Punto();
    private int l;

    public Poligono(int lados,  Punto centro, Punto vertice) {
        double R= radio(centro,vertice);
        double a = acos((vertice.getX()-centro.getX())/R);
        c = centro;
        v = vertice;
        l = lados;
        punto = new Punto[lados];
        for (int i = 0; i < lados; i++) {
            punto[i] = new Punto(centro.getX() + R * sin(a+(Math.PI*i*(lados-2))/ lados),centro.getY() + R * cos(a+(Math.PI*i*(lados-2))/ lados));
        
        }
    }

    public Punto[] getPunto() {
        return punto;
    }

    /**
     * Set the value of punto
     *
     * @param punto new value of punto
     */
    public void setPunto(Punto[] punto) {
        this.punto = punto;
    }

    /**
     * Get the value of punto at specified index
     *
     * @param index the index of punto
     * @return the value of punto at specified index
     */
    public Punto getPunto(int index) {
        return this.punto[index];
    }

    public int numLados() {
        return punto.length;
    }

    public void desplazamiento(double x, double y) {
        for (Punto punto1 : punto) {
            punto1.setX(punto1.getX() + x);
            punto1.setY(punto1.getY() + y);
        }
    }

    public void escalado(double a) {
        for (Punto punto1 : punto) {
            punto1.setX(punto1.getX() * a);
            punto1.setY(punto1.getY() * a);
        }
    }

    public double radio(Punto centro, Punto vertice){
        return sqrt(pow(vertice.getX()-centro.getX(),2)+pow(vertice.getY()-centro.getY(),2));
    } 
 
    public double apotema()
    {
        double R = radio(c,v);
        double distancia =  sqrt(pow(punto[0].getX() - punto[1].getX(), 2) + pow(punto[0].getY() - punto[1].getY(), 2));
        
        return sqrt(pow(R,2)-pow(distancia/2,2));
    }
    
    public double area()
    {
        return perimetro()*apotema()/2;
    }
    
    public double perimetro(){
         return  l*sqrt(pow(punto[1].getX()-punto[0].getX(), 2) + pow(punto[1].getY()-punto[0].getY(), 2));
    }
}
